home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 2.iso / programr / dpmigcc5.zip / RSX / SOURCE / ASM16 / SWITCH.ASM < prev    next >
Assembly Source File  |  1994-05-27  |  2KB  |  82 lines

  1.     INCLUDE REGS386.INC
  2.     INCLUDE TRANS.INC
  3.  
  4.     .386p
  5.  
  6. DGROUP group _DATA
  7.  
  8. _DATA segment word public 'DATA' use16
  9.     extrn _cs16real: word
  10.     extrn _ds16real: word
  11.     trs TRANS  <>              ; translation struct for r-mode switch
  12.     goProtectMode    dd    ?     ; Location of far call routine
  13. _DATA ends
  14.  
  15. _TEXT segment byte public 'CODE' use16
  16.     assume cs:_TEXT,ds:DGROUP
  17.  
  18. ;
  19. ;    void RealModeSwitch(void)
  20. ;
  21. public    _RealModeSwitch
  22. _RealModeSwitch proc near
  23.     pop    bx            ;Where to return from this procedure
  24.  
  25.     movzx    ebx, bx
  26.     movzx    esi, si
  27.     movzx    edi, di
  28.     movzx    ebp, bp
  29.     mov    dword ptr trs.T_EBX, ebx
  30.     mov    dword ptr trs.T_ESI, esi
  31.     mov    dword ptr trs.T_EDI, edi
  32.     mov    dword ptr trs.T_EBP, ebp
  33.  
  34.     mov    word ptr trs.T_SP, sp
  35.     sub    word ptr trs.T_SP, 512
  36.     mov    word ptr trs.T_IP, offset _TEXT:@@realModeEntry
  37.     mov    word ptr trs.T_FLAGS, 0202h
  38.     mov    ax, _cs16real
  39.     mov    word ptr trs.T_CS, ax
  40.     mov    ax, _ds16real
  41.     mov    word ptr trs.T_DS, ax
  42.     mov    word ptr trs.T_ES, ax
  43.     mov    word ptr trs.T_SS, ax
  44.  
  45.     xor    ebx, ebx
  46.     xor    ecx, ecx
  47.     push    ds
  48.     pop    es
  49.     mov    di, offset DGROUP:trs
  50.     movzx    edi, di
  51.     mov    ax,0301h
  52.     int    31h
  53.  
  54.     mov    esi, dword ptr trs.T_ESI
  55.     mov    edi, dword ptr trs.T_EDI
  56.     mov    ebp, dword ptr trs.T_EBP
  57.     mov    sp, word ptr trs.T_SP
  58.     jmp    word ptr trs.T_EBX    ; stored by DPMIprotectedMode() below
  59. @@realModeEntry:
  60.     pop    goProtectMode    ; Address to return from real mode callback
  61.     push    bx        ; Address stored in realRegs above
  62.     ret            ; RealModeSwitch()
  63. _RealModeSwitch   endp
  64.  
  65. ;
  66. ;    void ProtectedModeSwitch(void)
  67. ;
  68. public    _ProtectedModeSwitch
  69. _ProtectedModeSwitch proc near
  70.     pop    bx              ;Return point (will be used in
  71.     mov    dword ptr trs.T_EBX, ebx  ;  RealModeSwitch above)
  72.     mov    dword ptr trs.T_ESI, esi
  73.     mov    dword ptr trs.T_EDI, edi
  74.     mov    dword ptr trs.T_EBP, ebp
  75.     mov    word ptr trs.T_SP, sp
  76.     jmp    goProtectMode    ;Saved retf address from real mode callback
  77. _ProtectedModeSwitch endp
  78.  
  79. _TEXT    ends
  80.  
  81.     end
  82.